package com.ruoyi.womp.controller;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Random;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.womp.config.RabbitMQConfig;
import com.ruoyi.womp.tools.DateUtil;
import com.ruoyi.womp.tools.Result;

@Controller
@RequestMapping("/t")
public class TController {

	@Autowired
	RabbitTemplate rabbitTemplate;
	@Autowired
	RedisTemplate<String, String> redisTemplate;

	@RequestMapping(value = "/t")
	public Result<?> openHandlingOpinions(String waCode, String beginDate, String endDate) {

		try {
			// String beginDate = "2023-01-01 00:00:00";
			Date date = DateUtil.parseDate(beginDate, "yyyy-MM-dd HH:mm:ss");

			Calendar cal = Calendar.getInstance();
			cal.setTime(date);

			Random random = new Random();
			while (true) {
				// String waCode = "ZGUS001";

				int numCZ = 8;
				int numLD = 8;
				int numZL = 2;
				int numGF = 8;
				int numGJ = 2;
				int numAC = 1;
				// int numWD = 1;
				int numSD = 1;
				int numSW = 2;

				JSONObject dataJsonObject = new JSONObject();
				dataJsonObject.put("type", 1);

				JSONObject messageJsonObject = new JSONObject();
				messageJsonObject.put("waCode", waCode);
				messageJsonObject.put("time", DateUtil.formatDate(cal.getTime(), "yyyy-MM-dd HH:mm:ss"));

				JSONArray dataJsonArray = new JSONArray();
				// 垂直度
				for (int i = 1; i <= numCZ; i++) {
					List<Double> list = new ArrayList<Double>();
					list.add(0.22);
					list.add(0.03);
					list.add(0.02);
					list.add(0.10);
					list.add(0.10);
					list.add(0.01);
					list.add(0.35);
					list.add(0.11);

					JSONObject jsonObject = new JSONObject();
					jsonObject.put("code", "CZ");
					jsonObject.put("orderNum", i);
					
					double num = Math.random();
					double value = Double.parseDouble(String.format("%.2f", list.get(i - 1)));
					if (i == 1 || i == 2 || i == 5) {
						jsonObject.put("value", value + num / 100 + num / 100);
					} else {
						jsonObject.put("value", value);
					}

					dataJsonArray.add(jsonObject);
				}

				for (int i = 1; i <= numLD; i++) {
					List<Integer> list = new ArrayList<Integer>();
					list.add(450);
					list.add(750);
					list.add(340);
					list.add(458);
					list.add(353);
					list.add(234);
					list.add(405);
					list.add(754);

					JSONObject jsonObject = new JSONObject();
					jsonObject.put("code", "LD");
					jsonObject.put("orderNum", i);
					// Double value = Math.random() * (100);
					// jsonObject.put("value", value.toString().substring(0, 4));
					jsonObject.put("value", list.get(i - 1));

					dataJsonArray.add(jsonObject);
				}

				// 分零点
				for (int i = 1; i <= numZL; i++) {
					List<Integer> list = new ArrayList<Integer>();
//					list.add(random.nextInt(1000));
//					list.add(random.nextInt(2000));
					list.add(0);
					list.add(0);

					JSONObject jsonObject = new JSONObject();
					jsonObject.put("code", "ZL");
					jsonObject.put("orderNum", i);
					jsonObject.put("value", list.get(i - 1));

					dataJsonArray.add(jsonObject);
				}

				// 轨缝
				for (int i = 1; i <= numGF; i++) {
					List<Double> list = new ArrayList<Double>();
					list.add(2.25);
					list.add(2.43);
					list.add(3.53);
					list.add(3.60);
					list.add(3.51);
					list.add(2.57);
					list.add(2.51);
					list.add(2.71);

					JSONObject jsonObject = new JSONObject();
					jsonObject.put("code", "GF");
					jsonObject.put("orderNum", i);
					
					double num = Math.random();
					double value = Double.parseDouble(String.format("%.2f", list.get(i - 1)));
					jsonObject.put("value", value + num / 100);

					dataJsonArray.add(jsonObject);
				}

				// 轨距
				for (int i = 1; i <= numGJ; i++) {
					JSONObject jsonObject = new JSONObject();
					jsonObject.put("code", "GJ");
					jsonObject.put("orderNum", i);
					jsonObject.put("value", 1435);

					dataJsonArray.add(jsonObject);
				}

				// 电压
				for (int i = 1; i <= numAC; i++) {
					JSONObject jsonObject = new JSONObject();
					jsonObject.put("code", "AC");
					jsonObject.put("orderNum", i);
					jsonObject.put("value", 220);

					dataJsonArray.add(jsonObject);
				}

				// 室外温度
//				for (int i = 1; i <= numWD; i++) {
//					JSONObject jsonObject = new JSONObject();
//					jsonObject.put("code", "WD");
//					jsonObject.put("orderNum", i);
//					jsonObject.put("value", random.nextInt(1) + 26);
				//
//					dataJsonArray.add(jsonObject);
//				}

				for (int i = 1; i <= numSD; i++) {
					JSONObject jsonObject = new JSONObject();
					jsonObject.put("code", "SD");
					jsonObject.put("orderNum", i);
					jsonObject.put("value", "33.20");

					dataJsonArray.add(jsonObject);
				}

				for (int i = 1; i <= numSW; i++) {
					List<Double> list = new ArrayList<Double>();
					list.add(12d);
					list.add(15d);

					JSONObject jsonObject = new JSONObject();
					jsonObject.put("code", "SW");
					jsonObject.put("orderNum", i);
					jsonObject.put("value", list.get(i - 1));

					dataJsonArray.add(jsonObject);
				}

				messageJsonObject.put("data", dataJsonArray);
				dataJsonObject.put("message", messageJsonObject);

				// System.out.println(dataJsonObject.toJSONString());
				rabbitTemplate.convertAndSend(RabbitMQConfig.MQ_EXCHANGE_FANOUT_REALTIME_DATA,
						RabbitMQConfig.MQ_ROUTINGKEY_REALTIME_DATA, dataJsonObject.toJSONString());

				// 告警数据
//				JSONObject alarmJsonObject = new JSONObject();
//				alarmJsonObject.put("type", 2);
				//
//				JSONObject alarmMessageJsonObject = new JSONObject();
//				alarmMessageJsonObject.put("waCode", waCode);
//				alarmMessageJsonObject.put("time", DateUtil.sysDateTime());
				//
//				JSONArray alarmDataJsonArray = new JSONArray();
//				JSONObject alarmDataJsonObject = new JSONObject();
//				alarmDataJsonObject.put("code", "CZ");
//				alarmDataJsonObject.put("orderNum", 1);
//				alarmDataJsonObject.put("value", 0.5);
//				alarmDataJsonObject.put("message", "倾角过大");
//				alarmDataJsonObject.put("alarm", 1);
//				alarmDataJsonArray.add(alarmDataJsonObject);
				//
//				alarmMessageJsonObject.put("data", alarmDataJsonArray);
				//
//				alarmJsonObject.put("message", alarmMessageJsonObject);
				//
//				rabbitTemplate.convertAndSend(RabbitMQConfig.MQ_EXCHANGE_FANOUT_REALTIME_DATA,
//						RabbitMQConfig.MQ_ROUTINGKEY_REALTIME_DATA, alarmJsonObject.toJSONString());

				if (DateUtil.formatDate(cal.getTime(), "yyyy-MM-dd HH:mm:ss").equals(endDate)) {
					break;
				}
				System.out.println(DateUtil.formatDate(cal.getTime(), "yyyy-MM-dd HH:mm:ss"));
				cal.add(Calendar.MINUTE, 10);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return Result.OK();
	}

	public static void main(String[] args) {
		for (int i = 0; i < 100; i++) {
			double num = Math.random();
			//System.out.println(num/100);
			System.out.println(String.format("%.2f", num/100+num/100+num/100));
		}

	}
}
